package vip.idiy.anwei_android_iot;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.commons.lang3.StringUtils;

import java.util.List;

import vip.idiy.anwei_android_iot.domin.DeviceType;
import vip.idiy.anwei_android_iot.utils.ActivityFactory;
import vip.idiy.anwei_android_iot.utils.DatabaseUtil;
import vip.idiy.anwei_android_iot.utils.IotUtil;
import vip.idiy.anwei_android_iot.utils.ViewUtil;
import vip.idiy.anwei_android_iot.utils.dbHandle.TypeDataHandle;
import vip.idiy.anwei_android_iot.views.LayoutTableRow;

/**
 * 暂时不搞父子表
 */
public class TypeHandleActivity extends AppCompatActivity {

    private TableLayout tableLayout;
    private TypeDataHandle typeDataHandle;
    // 总页数
    private int totalPages;
    private TextView layout_reuse_table_total_text_view;

    private final int DEFAULT_PAGE = 1;
    // 查询编辑框内容
    private EditText layout_reuse_table_query_content_edit_text;
    // 查询参数
    private final String QUERY_SCENE_NAME = "type_name";
    // 当前页码内容
    private EditText layout_reuse_table_page_edit_text;
    // 当前页码
    private int now_page;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_type_data_handle);
        // 设置设透明状态栏,导航栏. 状态栏字体修改为黑色
        ViewUtil.setViewStyle(this, true);
        // 把activity赋值到ActivityFactory
        ActivityFactory.setTypeHandleActivity(this);

        initView();
        initData();
    }

    /**
     * 初始化位置数据
     */
    private void initData() {
        DatabaseUtil databaseUtil = DatabaseUtil.getInstance(this);
        typeDataHandle = new TypeDataHandle(databaseUtil);
        // 设置默页码
        layout_reuse_table_page_edit_text.setText(String.valueOf(DEFAULT_PAGE));
        // 获取数据列表
        getList(null, null, DEFAULT_PAGE);
    }

    /**
     * 获取数据列表
     *
     * @param columnNames
     * @param columnValues
     * @param page
     */
    private void getList(String[] columnNames, String[] columnValues, int page) {
        int count = typeDataHandle.getTotalRecordCount(columnValues);
        if (count == 0) {
            layout_reuse_table_total_text_view.setText(String.format(getResources().getString(R.string.data_total), 0));
            Toast.makeText(this, R.string.error_data_is_null, Toast.LENGTH_SHORT).show();
            return;
        }
        // 获取页码
        totalPages = IotUtil.getTotalPages(count);

        if (page > totalPages) {
            Toast.makeText(this, R.string.error_page_is_max, Toast.LENGTH_SHORT).show();
            return;
        }
        if (page == 0) {
            Toast.makeText(this, R.string.error_page_is_min, Toast.LENGTH_SHORT).show();
            return;
        }
        now_page = page;
        // 设置显示当前页码
        layout_reuse_table_page_edit_text.setText(String.valueOf(page));
        // 清空
        tableLayout.removeAllViews();
        // 添加表头
        boolean[] tableIsShow = {true, false, false, false, false, true, true};
        LayoutTableRow tableRow = new LayoutTableRow(this).init(tableIsShow, false, false)
                .setData(0, getString(R.string.table_type_name))
                .setTextColor(0, getColor(R.color.white))
                .setData(5, getString(R.string.table_type_img))
                .setTextColor(5, getColor(R.color.white))
                .setData(6, getString(R.string.table_handle))
                .setTextColor(6, getColor(R.color.white))
                .setBackground(R.drawable.ripple_blue);
        tableLayout.addView(tableRow);
        // 设置显示页码
        layout_reuse_table_total_text_view.setText(String.format(getResources().getString(R.string.data_total), totalPages));
        // 获取列表
        List<DeviceType> deviceTypeList = typeDataHandle.getList(columnNames, columnValues, page);
        // 设置显示的列  7列,只显示一列
        boolean[] isShow = {true, false, false, false, false, false, false};
        for (DeviceType deviceType : deviceTypeList) {
            LayoutTableRow layoutTableRow = new LayoutTableRow(this).init(isShow, true, true)
                    .setData(0, deviceType.getTypeName()) // 设置位置名称
                    .setEditAndRemovePar(deviceType.getTypeName()) // 设置编辑和删除需要的参数
                    .setImage(IotUtil.checkImg(deviceType.getTypeImg()).getIcon()) // 设置位置图标
                    .setEditButtonClickListener(text -> goToTypeDetailHandle(GlobalApplication.EDIT_MODE, text)) // 编辑
                    .setRemoveButtonClickListener(text -> goToTypeDetailHandle(GlobalApplication.REMOVE_MODE, text)); // 移除
            tableLayout.addView(layoutTableRow);
        }
    }

    /**
     * 初始化窗口
     */
    private void initView() {
        // 标题
        TextView layout_reuse_head_tv_title = findViewById(R.id.layout_reuse_head_tv_title);
        layout_reuse_head_tv_title.setText(R.string.page_type_handle);
        // 表格
        tableLayout = findViewById(R.id.table_layout);
        // 查询标题
        TextView layout_reuse_table_query_text_view = findViewById(R.id.layout_reuse_table_query_text_view);
        layout_reuse_table_query_text_view.setText(R.string.table_type_name);
        // 查询内容
        layout_reuse_table_query_content_edit_text = findViewById(R.id.layout_reuse_table_query_content_edit_text);
        // 总页码
        layout_reuse_table_total_text_view = findViewById(R.id.layout_reuse_table_total_text_view);
        // 当前页码
        layout_reuse_table_page_edit_text = findViewById(R.id.layout_reuse_table_page_edit_text);
        // 返回按钮
        findViewById(R.id.layout_reuse_head_return_myImageButton).setOnClickListener(v -> finish());
        // 添加按钮
        findViewById(R.id.layout_reuse_table_add_myImageButton)
                .setOnClickListener(v -> goToTypeDetailHandle(GlobalApplication.ADD_MODE, null));
        // 刷新
        findViewById(R.id.layout_reuse_table_flush_myImageButton)
                .setOnClickListener(v -> getList(null, null, now_page));
        // 查询
        findViewById(R.id.layout_reuse_table_query_myImageButton).setOnClickListener(v -> {
            String par = layout_reuse_table_query_content_edit_text.getText().toString().trim();
            if (StringUtils.isEmpty(par)) {
                getList(null, null, DEFAULT_PAGE);
            } else {
                getList(new String[]{QUERY_SCENE_NAME}, new String[]{par}, DEFAULT_PAGE);
            }
        });
        // 上一页
        findViewById(R.id.layout_reuse_table_prev_page).setOnClickListener(v -> {
            String page = layout_reuse_table_page_edit_text.getText().toString().trim();
            getList(null, null, StringUtils.isEmpty(page) ? DEFAULT_PAGE : Integer.parseInt(page) - 1);
        });
        // 下一页
        findViewById(R.id.layout_reuse_table_next_page).setOnClickListener(v -> {
            String page = layout_reuse_table_page_edit_text.getText().toString().trim();
            getList(null, null, StringUtils.isEmpty(page) ? DEFAULT_PAGE : Integer.parseInt(page) + 1);
        });
    }

    /**
     * 跳转AddEditTypeActivity
     *
     * @param mode
     * @param type_name
     */
    private void goToTypeDetailHandle(int mode, String type_name) {
        Intent intent = new Intent(TypeHandleActivity.this, AddEditTypeActivity.class);
        intent.putExtra("mode", mode);
        intent.putExtra("par", type_name);
        startActivity(intent);
    }

    /**
     * 编辑 添加 删除后刷新列表
     * 编辑 刷新当前页, 添加和删除都获取最后一页
     *
     * @param mode
     */
    public void flushList(int mode) {
        int page = now_page;
        switch (mode) {
            case GlobalApplication.EDIT_MODE:
                getList(null, null, page);
                break;
            case GlobalApplication.ADD_MODE:
                page = IotUtil.getTotalPages(typeDataHandle.getTotalRecordCount(null));
                getList(null, null, page);
                break;
            case GlobalApplication.REMOVE_MODE:
                int totalPage = IotUtil.getTotalPages(typeDataHandle.getTotalRecordCount(null));
                page = Math.min(totalPage, now_page);
                getList(null, null, page);
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityFactory.mainActivity_defaultSelectHome();
    }
}